package cn.wolfcode.wolf2w.util;

import cn.wolfcode.wolf2w.exception.LogicException;
import org.springframework.util.StringUtils;

/**
 * 参数断言工具类
 *
 */
public abstract class AssertUtil {

    private AssertUtil() {}

    /**
     * 判断参数值是否为空(String类型)
     * 假设为空抛逻辑异常对象
     *
     * @param values 需要判断的值
     * @param msg 异常信息
     */
    public static void hasLength(String msg,String ... values) {
        //遍历要判断的参数
        for (String value : values) {
            if (!StringUtils.hasLength(value)) {
                throw new LogicException(msg);
            }
        }
    }

    /**
     * 判断某个值是否在某个区间(数值类型类型)
     * 假设未在区间抛逻辑异常对象
     *
     * @param min 区间最小值
     * @param max 区间最大值
     * @param msg 异常信息
     */
    public static void hasNumber(String msg,long parameter, long min,long max) {
        //遍历要判断的参数
        if (parameter < min || parameter > max) {
            throw new LogicException(msg);
        }
    }

    /**
     * 判断参数值是否为空(对象类型)
     * 假设为空抛逻辑异常对象
     *
     * @param msg
     * @param objects
     */
    public static void hasObject(String msg,Object ... objects) {
        //遍历要判断的参数
        for (Object object : objects) {
            if (object==null) {
                throw new LogicException(msg);
            }
        }
    }

    /**
     * 判断传入的俩个参数v1和v2是否相等
     * 如果不相等抛逻辑异常
     *
     * @param v1
     * @param v2
     * @param msg : 异常信息
     */
    public static void esEquals(String msg,String v1,String v2) {
        //非空处理
        hasLength(msg,v1,v2);
        if (!v1.equals(v2)) {
            throw new LogicException(msg);
        }
    }

    /**
     * 手机号格式判断
     * @param phone
     */
    public static void checkPhone(String phone) {
        //正则表达式
        String regex = "^((13[0-9])|(14[0,1,4-9])|(15[0-3,5-9])|(16[2,5,6,7])|(17[0-8])|(18[0-9])|(19[0-3,5-9]))\\d{8}$";
        //非空处理
        hasLength("手机号不能为空",phone);
        if (!phone.matches(regex)) {
            throw new LogicException("手机号码格式不正确");
        }
    }

}
